Указатели для компьютерной мыши могут кардинально отличаться от всем известной стрелочки. Не секрет, что этот элемент интерфейса системы является одним из самых часто используемых инструментов. Иногда возникает необходимость поставить более яркие курсоры для мыши. В C# существует возможность подключать анимированные курсоры для привлекательности Вашего приложения. Это делается при помощи функции «LoadCursorFromFile». Ей передается всего один параметр – только путь к файлу анимированного курсора (*.ANI).
Функция «LoadCursorFromFile» создает курсор, основанный на данных, содержащихся в файле. Файл определен его именем или идентификатором системного курсора. Функция возвращает дескриптор недавно созданного курсора. Файлы, содержащие данные курсора могут быть в формате или курсора (.CUR), или "живого указателя" (.ANI). Благодаря этой функции можно применять различные курсоры в своих программах.
Ниже приводится список имен системных курсоров и идентификаторов:Функция «LoadCursorFromFile» создает курсор, основанный на данных, содержащихся в файле. Файл определен его именем или идентификатором системного курсора. Функция возвращает дескриптор недавно созданного курсора. Файлы, содержащие данные курсора могут быть в формате или курсора (.CUR), или "живого указателя" (.ANI). Благодаря этой функции можно применять различные курсоры в своих программах.
Имена системных курсоров | Идентификаторы системных курсоров |
---|---|
"Arrow" | OCR_NORMAL |
"IBeam" | OCR_IBEAM |
"Wait" | OCR_WAIT |
"Crosshair" | OCR_CROSS |
"UpArrow" | OCR_UP |
"Size" | OCR_SIZE |
"Icon" | OCR_ICON |
"SizeNWSE" | OCR_SIZENWSE |
"SizeNESW" | OCR_SIZENESW |
"SizeWE" | OCR_SIZEWE |
"SizeNS" | OCR_SIZENS |
"SizeAll" | OCR_SIZEALL |
"No" | OCR_NO |
"AppStarting" | OCR_APPSTARTINGd |
- System.Windows.Forms.ImageList imageList1 - элемент управления, содержащий изображения курсоров;
- System.Windows.Forms.ListView listView1 - элемент управления для вывода изображений курсоров.
Сделайте двойной клик левой клавишей мыши по любому свободному месту главной формы, вы перейдете в редактор кода с установкой курсора в автоматически созданном методе «Form1_Load», события «Load», выполняющегося при загрузке формы. Вставьте в тело данного метода приведенный ниже листинг.
//Инициализируем новый список //путей к курсорам. PathImage = new List<string>(); //Инициализируем новую переменную //для работы с директорией курсоров. System.IO.DirectoryInfo dirK = new System.IO.DirectoryInfo( Application.StartupPath+"\\Cursor"); //Переменная для подсчета найденных курсоров. int indexImage = 0; //Получение всех курсоров из директории Cursor. foreach (var item in dirK.GetFiles("*.ani", System.IO.SearchOption.AllDirectories)) { //Получаем представление изображения, //содержащегося в заданном файле, в виде //значка. System.Drawing.Icon i = System.Drawing.Icon.ExtractAssociatedIcon(item.FullName); //Добавляем новое изображение курсора. imageList1.Images.Add(i.ToBitmap()); //Добавляем путь к курсору в список. PathImage.Add(item.FullName); //Создаем новую переменную, отвечающую //за добавление нового элемента в //listView1. ListViewItem lvi = new ListViewItem(); lvi.ImageIndex = indexImage; listView1.Items.Add(lvi); indexImage++; } //Задаем список ImageList1, используемый //при отображении элементов в элементе //управления в виде крупных значков. listView1.LargeImageList = imageList1; //Задаем список ImageList1, используемый //при отображении элементов в элементе //управления в виде маленьких значков. listView1.SmallImageList = imageList1;Так же добавьте приведенный ниже класс, в листинг главной формы.
//Список для хранения пути к изображению. public List<string> PathImage; public class AdvancedCursors { //Функция LoadCursorFromFile создает курсор, основанный на данных, //содержащихся в файле. Файл определен его именем //или идентификатором системного курсора. [System.Runtime.InteropServices.DllImport("User32.dll")] private static extern IntPtr LoadCursorFromFile(String str); public static Cursor Create(string filename) { IntPtr hCursor = LoadCursorFromFile(filename); if (!IntPtr.Zero.Equals(hCursor)) { return new Cursor(hCursor); } else { throw new ApplicationException("Ошибка загрузки курсора: " + filename); } } }Вернитесь в конструктор главной формы вашего проекта и сделайте двойной клик левой клавишей мыши по элементу управления «listView1», вы перейдете в редактор кода с установкой курсора в автоматически созданном методе «listView1_SelectedIndexChanged», события «SelectedIndexChanged». Данное событие возникает при выборе пользователем элемента либо отмене выбора элемента. Когда пользователь выбирает элемент, не нажимая клавишу CTRL (не намереваясь выбрать несколько элементов), в первую очередь в элементе управления отменяется предыдущее выделение. В этом случае данное событие происходит по одному разу для каждого предварительно выбранного элемента и один раз для нового выбранного элемента. Добавьте в данный метод приведенный ниже код, установки выбранного курсора для проекта.
try { //Задаем курсор, отображаемый, когда указатель мыши находится //на элементе управления. this.Cursor = AdvancedCursors.Create( System.IO.Path.Combine(PathImage[listView1.SelectedIndices[0]])); } catch (Exception err) { //Вывод сообщения об ошибке. //MessageBox.Show(err.Message); }Перейдите в свойства элемента управления «listView1» и выставьте значение «Fill», у свойства «Dock». Запустите проект, нажав на клавишу «F5». После успешной компиляции и запуска вашего проекта у вас откроется главная форма проекта с загрузкой анимированных курсоров из каталога «Cursor», расположенного в директории с исполняемым файлом проекта. Сделайте клик левой клавишей мыши по любому курсору. Выбранный курсор будет установлен по умолчанию для данного проекта. Примеры результата работы проекта, представлены ниже.
Спасибо огромное!!!!!!!!!
ОтветитьУдалить